define(["require", "exports", "vscode-languageserver-protocol/utils/is", "vscode-jsonrpc", "vscode-languageserver-protocol/protocol.implementation", "vscode-languageserver-protocol/protocol.typeDefinition", "vscode-languageserver-protocol/protocol.workspaceFolders", "vscode-languageserver-protocol/protocol.configuration", "vscode-languageserver-protocol/protocol.colorProvider"], function (require, exports, Is, vscode_jsonrpc_1, protocol_implementation_1, protocol_typeDefinition_1, protocol_workspaceFolders_1, protocol_configuration_1, protocol_colorProvider_1) {
    /* --------------------------------------------------------------------------------------------
     * Copyright (c) Microsoft Corporation. All rights reserved.
     * Licensed under the MIT License. See License.txt in the project root for license information.
     * ------------------------------------------------------------------------------------------ */
    'use strict';
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
    exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
    exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
    exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
    exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
    exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
    exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
    var DocumentFilter;
    (function (DocumentFilter) {
        function is(value) {
            let candidate = value;
            return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
        }
        DocumentFilter.is = is;
    })(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));
    /**
     * The `client/registerCapability` request is sent from the server to the client to register a new capability
     * handler on the client side.
     */
    var RegistrationRequest;
    (function (RegistrationRequest) {
        RegistrationRequest.type = new vscode_jsonrpc_1.RequestType('client/registerCapability');
    })(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));
    /**
     * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
     * handler on the client side.
     */
    var UnregistrationRequest;
    (function (UnregistrationRequest) {
        UnregistrationRequest.type = new vscode_jsonrpc_1.RequestType('client/unregisterCapability');
    })(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));
    /**
     * Defines how the host (editor) should sync
     * document changes to the language server.
     */
    var TextDocumentSyncKind;
    (function (TextDocumentSyncKind) {
        /**
         * Documents should not be synced at all.
         */
        TextDocumentSyncKind.None = 0;
        /**
         * Documents are synced by always sending the full content
         * of the document.
         */
        TextDocumentSyncKind.Full = 1;
        /**
         * Documents are synced by sending the full content on open.
         * After that only incremental updates to the document are
         * send.
         */
        TextDocumentSyncKind.Incremental = 2;
    })(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));
    /**
     * The initialize request is sent from the client to the server.
     * It is sent once as the request after starting up the server.
     * The requests parameter is of type [InitializeParams](#InitializeParams)
     * the response if of type [InitializeResult](#InitializeResult) of a Thenable that
     * resolves to such.
     */
    var InitializeRequest;
    (function (InitializeRequest) {
        InitializeRequest.type = new vscode_jsonrpc_1.RequestType('initialize');
    })(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));
    /**
     * Known error codes for an `InitializeError`;
     */
    var InitializeError;
    (function (InitializeError) {
        /**
         * If the protocol version provided by the client can't be handled by the server.
         * @deprecated This initialize error got replaced by client capabilities. There is
         * no version handshake in version 3.0x
         */
        InitializeError.unknownProtocolVersion = 1;
    })(InitializeError = exports.InitializeError || (exports.InitializeError = {}));
    /**
     * The intialized notification is sent from the client to the
     * server after the client is fully initialized and the server
     * is allowed to send requests from the server to the client.
     */
    var InitializedNotification;
    (function (InitializedNotification) {
        InitializedNotification.type = new vscode_jsonrpc_1.NotificationType('initialized');
    })(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));
    //---- Shutdown Method ----
    /**
     * A shutdown request is sent from the client to the server.
     * It is sent once when the client decides to shutdown the
     * server. The only notification that is sent after a shutdown request
     * is the exit event.
     */
    var ShutdownRequest;
    (function (ShutdownRequest) {
        ShutdownRequest.type = new vscode_jsonrpc_1.RequestType0('shutdown');
    })(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));
    //---- Exit Notification ----
    /**
     * The exit event is sent from the client to the server to
     * ask the server to exit its process.
     */
    var ExitNotification;
    (function (ExitNotification) {
        ExitNotification.type = new vscode_jsonrpc_1.NotificationType0('exit');
    })(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));
    //---- Configuration notification ----
    /**
     * The configuration change notification is sent from the client to the server
     * when the client's configuration has changed. The notification contains
     * the changed configuration as defined by the language client.
     */
    var DidChangeConfigurationNotification;
    (function (DidChangeConfigurationNotification) {
        DidChangeConfigurationNotification.type = new vscode_jsonrpc_1.NotificationType('workspace/didChangeConfiguration');
    })(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));
    //---- Message show and log notifications ----
    /**
     * The message type
     */
    var MessageType;
    (function (MessageType) {
        /**
         * An error message.
         */
        MessageType.Error = 1;
        /**
         * A warning message.
         */
        MessageType.Warning = 2;
        /**
         * An information message.
         */
        MessageType.Info = 3;
        /**
         * A log message.
         */
        MessageType.Log = 4;
    })(MessageType = exports.MessageType || (exports.MessageType = {}));
    /**
     * The show message notification is sent from a server to a client to ask
     * the client to display a particular message in the user interface.
     */
    var ShowMessageNotification;
    (function (ShowMessageNotification) {
        ShowMessageNotification.type = new vscode_jsonrpc_1.NotificationType('window/showMessage');
    })(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));
    /**
     * The show message request is sent from the server to the client to show a message
     * and a set of options actions to the user.
     */
    var ShowMessageRequest;
    (function (ShowMessageRequest) {
        ShowMessageRequest.type = new vscode_jsonrpc_1.RequestType('window/showMessageRequest');
    })(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));
    /**
     * The log message notification is sent from the server to the client to ask
     * the client to log a particular message.
     */
    var LogMessageNotification;
    (function (LogMessageNotification) {
        LogMessageNotification.type = new vscode_jsonrpc_1.NotificationType('window/logMessage');
    })(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));
    //---- Telemetry notification
    /**
     * The telemetry event notification is sent from the server to the client to ask
     * the client to log telemetry data.
     */
    var TelemetryEventNotification;
    (function (TelemetryEventNotification) {
        TelemetryEventNotification.type = new vscode_jsonrpc_1.NotificationType('telemetry/event');
    })(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));
    /**
     * The document open notification is sent from the client to the server to signal
     * newly opened text documents. The document's truth is now managed by the client
     * and the server must not try to read the document's truth using the document's
     * uri. Open in this sense means it is managed by the client. It doesn't necessarily
     * mean that its content is presented in an editor. An open notification must not
     * be sent more than once without a corresponding close notification send before.
     * This means open and close notification must be balanced and the max open count
     * is one.
     */
    var DidOpenTextDocumentNotification;
    (function (DidOpenTextDocumentNotification) {
        DidOpenTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didOpen');
    })(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));
    /**
     * The document change notification is sent from the client to the server to signal
     * changes to a text document.
     */
    var DidChangeTextDocumentNotification;
    (function (DidChangeTextDocumentNotification) {
        DidChangeTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didChange');
    })(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));
    /**
     * The document close notification is sent from the client to the server when
     * the document got closed in the client. The document's truth now exists where
     * the document's uri points to (e.g. if the document's uri is a file uri the
     * truth now exists on disk). As with the open notification the close notification
     * is about managing the document's content. Receiving a close notification
     * doesn't mean that the document was open in an editor before. A close
     * notification requires a previous open notification to be sent.
     */
    var DidCloseTextDocumentNotification;
    (function (DidCloseTextDocumentNotification) {
        DidCloseTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didClose');
    })(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));
    /**
     * The document save notification is sent from the client to the server when
     * the document got saved in the client.
     */
    var DidSaveTextDocumentNotification;
    (function (DidSaveTextDocumentNotification) {
        DidSaveTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didSave');
    })(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));
    /**
     * A document will save notification is sent from the client to the server before
     * the document is actually saved.
     */
    var WillSaveTextDocumentNotification;
    (function (WillSaveTextDocumentNotification) {
        WillSaveTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/willSave');
    })(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));
    /**
     * A document will save request is sent from the client to the server before
     * the document is actually saved. The request can return an array of TextEdits
     * which will be applied to the text document before it is saved. Please note that
     * clients might drop results if computing the text edits took too long or if a
     * server constantly fails on this request. This is done to keep the save fast and
     * reliable.
     */
    var WillSaveTextDocumentWaitUntilRequest;
    (function (WillSaveTextDocumentWaitUntilRequest) {
        WillSaveTextDocumentWaitUntilRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/willSaveWaitUntil');
    })(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));
    //---- File eventing ----
    /**
     * The watched files notification is sent from the client to the server when
     * the client detects changes to file watched by the language client.
     */
    var DidChangeWatchedFilesNotification;
    (function (DidChangeWatchedFilesNotification) {
        DidChangeWatchedFilesNotification.type = new vscode_jsonrpc_1.NotificationType('workspace/didChangeWatchedFiles');
    })(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));
    /**
     * The file event type
     */
    var FileChangeType;
    (function (FileChangeType) {
        /**
         * The file got created.
         */
        FileChangeType.Created = 1;
        /**
         * The file got changed.
         */
        FileChangeType.Changed = 2;
        /**
         * The file got deleted.
         */
        FileChangeType.Deleted = 3;
    })(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));
    var WatchKind;
    (function (WatchKind) {
        /**
         * Interested in create events.
         */
        WatchKind.Create = 1;
        /**
         * Interested in change events
         */
        WatchKind.Change = 2;
        /**
         * Interested in delete events
         */
        WatchKind.Delete = 4;
    })(WatchKind = exports.WatchKind || (exports.WatchKind = {}));
    //---- Diagnostic notification ----
    /**
     * Diagnostics notification are sent from the server to the client to signal
     * results of validation runs.
     */
    var PublishDiagnosticsNotification;
    (function (PublishDiagnosticsNotification) {
        PublishDiagnosticsNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/publishDiagnostics');
    })(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));
    /**
     * How a completion was triggered
     */
    var CompletionTriggerKind;
    (function (CompletionTriggerKind) {
        /**
         * Completion was triggered by typing an identifier (24x7 code
         * complete), manual invocation (e.g Ctrl+Space) or via API.
         */
        CompletionTriggerKind.Invoked = 1;
        /**
         * Completion was triggered by a trigger character specified by
         * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
         */
        CompletionTriggerKind.TriggerCharacter = 2;
        /**
         * Completion was re-triggered as current completion list is incomplete
         */
        CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
    })(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));
    /**
     * Request to request completion at a given text document position. The request's
     * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response
     * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)
     * or a Thenable that resolves to such.
     *
     * The request can delay the computation of the [`detail`](#CompletionItem.detail)
     * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`
     * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
     * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
     */
    var CompletionRequest;
    (function (CompletionRequest) {
        CompletionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/completion');
    })(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));
    /**
     * Request to resolve additional information for a given completion item.The request's
     * parameter is of type [CompletionItem](#CompletionItem) the response
     * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.
     */
    var CompletionResolveRequest;
    (function (CompletionResolveRequest) {
        CompletionResolveRequest.type = new vscode_jsonrpc_1.RequestType('completionItem/resolve');
    })(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));
    //---- Hover Support -------------------------------
    /**
     * Request to request hover information at a given text document position. The request's
     * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of
     * type [Hover](#Hover) or a Thenable that resolves to such.
     */
    var HoverRequest;
    (function (HoverRequest) {
        HoverRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/hover');
    })(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));
    var SignatureHelpRequest;
    (function (SignatureHelpRequest) {
        SignatureHelpRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/signatureHelp');
    })(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));
    //---- Goto Definition -------------------------------------
    /**
     * A request to resolve the definition location of a symbol at a given text
     * document position. The request's parameter is of type [TextDocumentPosition]
     * (#TextDocumentPosition) the response is of type [Definition](#Definition) or a
     * Thenable that resolves to such.
     */
    var DefinitionRequest;
    (function (DefinitionRequest) {
        DefinitionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/definition');
    })(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));
    /**
     * A request to resolve project-wide references for the symbol denoted
     * by the given text document position. The request's parameter is of
     * type [ReferenceParams](#ReferenceParams) the response is of type
     * [Location[]](#Location) or a Thenable that resolves to such.
     */
    var ReferencesRequest;
    (function (ReferencesRequest) {
        ReferencesRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/references');
    })(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));
    //---- Document Highlight ----------------------------------
    /**
     * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given
     * text document position. The request's parameter is of type [TextDocumentPosition]
     * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]
     * (#DocumentHighlight) or a Thenable that resolves to such.
     */
    var DocumentHighlightRequest;
    (function (DocumentHighlightRequest) {
        DocumentHighlightRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentHighlight');
    })(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));
    //---- Document Symbol Provider ---------------------------
    /**
     * A request to list all symbols found in a given text document. The request's
     * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the
     * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable
     * that resolves to such.
     */
    var DocumentSymbolRequest;
    (function (DocumentSymbolRequest) {
        DocumentSymbolRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentSymbol');
    })(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));
    //---- Workspace Symbol Provider ---------------------------
    /**
     * A request to list project-wide symbols matching the query string given
     * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is
     * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that
     * resolves to such.
     */
    var WorkspaceSymbolRequest;
    (function (WorkspaceSymbolRequest) {
        WorkspaceSymbolRequest.type = new vscode_jsonrpc_1.RequestType('workspace/symbol');
    })(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));
    /**
     * A request to provide commands for the given text document and range.
     */
    var CodeActionRequest;
    (function (CodeActionRequest) {
        CodeActionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/codeAction');
    })(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));
    /**
     * A request to provide code lens for the given text document.
     */
    var CodeLensRequest;
    (function (CodeLensRequest) {
        CodeLensRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/codeLens');
    })(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));
    /**
     * A request to resolve a command for a given code lens.
     */
    var CodeLensResolveRequest;
    (function (CodeLensResolveRequest) {
        CodeLensResolveRequest.type = new vscode_jsonrpc_1.RequestType('codeLens/resolve');
    })(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));
    /**
     * A request to to format a whole document.
     */
    var DocumentFormattingRequest;
    (function (DocumentFormattingRequest) {
        DocumentFormattingRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/formatting');
    })(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));
    /**
     * A request to to format a range in a document.
     */
    var DocumentRangeFormattingRequest;
    (function (DocumentRangeFormattingRequest) {
        DocumentRangeFormattingRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/rangeFormatting');
    })(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));
    /**
     * A request to format a document on type.
     */
    var DocumentOnTypeFormattingRequest;
    (function (DocumentOnTypeFormattingRequest) {
        DocumentOnTypeFormattingRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/onTypeFormatting');
    })(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));
    /**
     * A request to rename a symbol.
     */
    var RenameRequest;
    (function (RenameRequest) {
        RenameRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/rename');
    })(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));
    /**
     * A request to provide document links
     */
    var DocumentLinkRequest;
    (function (DocumentLinkRequest) {
        DocumentLinkRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentLink');
    })(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));
    /**
     * Request to resolve additional information for a given document link. The request's
     * parameter is of type [DocumentLink](#DocumentLink) the response
     * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.
     */
    var DocumentLinkResolveRequest;
    (function (DocumentLinkResolveRequest) {
        DocumentLinkResolveRequest.type = new vscode_jsonrpc_1.RequestType('documentLink/resolve');
    })(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));
    /**
     * A request send from the client to the server to execute a command. The request might return
     * a workspace edit which the client will apply to the workspace.
     */
    var ExecuteCommandRequest;
    (function (ExecuteCommandRequest) {
        ExecuteCommandRequest.type = new vscode_jsonrpc_1.RequestType('workspace/executeCommand');
    })(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));
    /**
     * A request sent from the server to the client to modified certain resources.
     */
    var ApplyWorkspaceEditRequest;
    (function (ApplyWorkspaceEditRequest) {
        ApplyWorkspaceEditRequest.type = new vscode_jsonrpc_1.RequestType('workspace/applyEdit');
    })(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));
});
